import cv2
import numpy as np

def drawShape(src, points):
    i = 0
    while i < len(points):

        if i == len(points) - 1:
            x,y = points[i][0]
            x1,y1 = points[0][0]
            cv2.line(src,(x,y),(x1,y1),(0,0,255),3)
        else:
            x, y = points[i][0]
            x1, y1 = points[i+1][0]
            cv2.line(src, (x, y), (x1, y1), (0, 255, 0), 3)
        i += 1

img = cv2.imread("C:\\Users\\86191\\Pictures\\Saved Pictures\\Camera Roll\\logo1.jpg")
# 灰度化
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 边缘检测
# cdst = cv2.Canny(gray,100,110)
# 二值化
ret, thresh = cv2.threshold(gray,150,255,cv2.THRESH_BINARY)

# 轮廓查找
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
# 绘制轮廓
cv2.drawContours(img, contours,-1,(0,0,255),6)

# # 计算面积
# area = cv2.contourArea(contours[2])
# print("area=%d"%(area))
# # 计算周长
# len = cv2.arcLength(contours[5], True)
# print("len=%d"%(len))

# 多边形逼近
# e = 60 # 误差值（精度）
# # contours[0]表示轮廓数组中的第一个轮廓
# approx = cv2.approxPolyDP(contours[0],e,True)
# drawShape(img, approx)
#
# # 凸包
# hull = cv2.convexHull(contours[0])
# drawShape(img, hull)

# 最小外接矩阵
rect = cv2.minAreaRect(contours[1])
box = cv2.boxPoints(rect)
box = np.int0(box)
cv2.drawContours(img,[box],0,(0,0,255),2)

# 最大外接矩阵
x,y,w,h = cv2.boundingRect(contours[1])
cv2.rectangle(img,(x,y),(x+w,y+h),(0,255,0),2)
# 显示
cv2.imshow("img",img)
# cv2.imshow("cdst",cdst)
# cv2.imshow("gray",gray)
cv2.waitKey(0)
